Há muitas controvérsias sobre o que o JavaScript deveria fazer se fosse correto
e o que ele realmente faz mas aqui mostraremos o que ele faz, se correto ou não
não nos interessa neste documento.
Só para te dar uma ideia da controvérsia, em JavaScript 1+1=11 e 1-1=0.
Súmula Operação | Variável1 | Operação | Variável2 | Resultado | Operação Efetuada |
String+String | '123' | + | '2' | '1232' | Soma de string convencional |
String-String | '123' | - | '2' | 121 | Converteu ambos operandos para número |
String*String | '123' | * | '2' | 246 | Converteu ambos operandos para número |
String/String | '123' | / | '2' | 61,5 | Converteu ambos operandos para número |
Número+Número | 123 | + | 1 | 124 | Operação de soma numérica convencional |
Número+String | 123 | + | '123' | '123123' | Converteu ambos operandos para string |
Boolean+Boolean | False | + | False | 0 | Converteu boolean False para zero |
Boolean+Boolean | True | + | True | 2 | Converteu boolean True para um |
Boolean+Número | True | + | 5 | 6 | Converteu boolean True para um |
Boolean+Número | False | + | 9 | 9 | Converteu boolean False para zero |
Boolean+String | False | + | 123 | false123 | Converteu o boolean para string False e somou os strings |
Boolean+String | True | + | 123 | true123 | Converteu o boolean para string False e somou os strings |
String+Boolean | 123 | + | True | 123true | Converteu o boolean para string False e somou os strings |
String+Boolean | 123 | + | False | 123false | Converteu o boolean para string False e somou os strings |
Variável Nova+Número | ??? | + | 2 | Número | A variável tem seu tipo e valor indefinido. |
Importante :
1-1-JavaScript é uma linguagem fracamente tipada, ou seja, uma variável pode conter diferentes tipos de
valores, ou seja, pode ser numérica, alfabética, booleana, a mesma variável. Portanto em javascript
é muito fácil ter mudanças de escopo numa mesma variável dependendo de seu valor e o JavaScript
determina como ela deverá ser tratada, por exemplo, podemos somar um string com um número que produzirá
um valor e a operação contrária provavelmente trará outro valor (lembre-se que a propriedade comutativa
da adição garante que a troca dos fatores não altera o resultado, não em JavaScript).
Por exemplo : Uma matriz é um conjunto de elementos. Normalmente de mesmo tipo. Uma matriz, certo?.
Contudo ao selecionarmos um elemento da matriz ( como matriz[0] ) estaremos trabalhando
com outro tipo de elemento, não matriz mas um simples string, número.
Por este motivo um matriz.split(","); dá erro mas matriz[0].split(","); não, a primeira é um array e o segundo um string.